package lvq;

public class Neuronio {

	private double[] coordenadas;
	private int x;
	private int y;
	
	public Neuronio(double[] coordenadas, int x, int y) {
		
		this.coordenadas = coordenadas;
		this.x = x;
		this.y = y;
	}

	public Neuronio(int dimensao, int x, int y) {

		this.coordenadas = new double[dimensao];
		this.x = x;
		this.y = y;

		for (int i = 0; i < coordenadas.length; i++) {
			coordenadas[i] = Math.random() * 10;
		}
	}
	
	public double distanciaEuclidiana(Neuronio neuronio) {
		
		return distanciaEuclidiana(neuronio.coordenadas());
	}
	
	public double distanciaEuclidiana(double[] coordenadasDado) {

		double somatoria = 0;

		for (int i = 0; i < coordenadas.length; i++) {

			double diferenca = coordenadasDado[i] - coordenadas[i];
			somatoria = somatoria + Math.pow(diferenca, 2);
		}

		return Math.round(Math.sqrt(somatoria));
	}

	public void aproximaNeuronio(double taxaAprendizagem, double taxaAproximacao, double[] coordenadasDados) {

		for (int i = 0; i < coordenadas.length; i++) {

			double novo = (coordenadasDados[i] - coordenadas[i]) * taxaAprendizagem * taxaAproximacao;
			coordenadas[i] = coordenadas[i] + novo;
		}
	}
	
	public double[] coordenadas() {
		return coordenadas;
	}

	public int x() {
		return x;
	}

	public int y() {
		return y;
	}
	
	public void imprime() {
		
		for (int i = 0; i < coordenadas.length; i++) {

			System.out.print(Math.round(coordenadas[i]) + "; ");
		}
		System.out.println();
	}
}
